﻿using Serilog.Parsing;
using System.Diagnostics;
using System.Text;

namespace Cngot.Extensions.Logger
{
    public class LineNumberEnricher : ILogEventEnricher
    {
        public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
        {
            //var lineNumber = new MessageTemplateParser().Parse("{SourceContext}:{LineNumber}"); // 解析模板以获取行号和文件名等信息，此处仅为示例，可能需要调整以正确获取行号和文件名。

            StackTrace stackTrace = new StackTrace(true); // true 表示捕获文件信息
            //StringBuilder stackTraceString = new StringBuilder();

            //stackTraceString.AppendLine("Stack Trace:");
            int lineNumber = 0;
            foreach (StackFrame frame in stackTrace.GetFrames())
            {
                if (frame.GetFileLineNumber() > 0)
                {
                    lineNumber = frame.GetFileLineNumber();
                }
                //stackTraceString.AppendFormat("\tat {0} in {1}:line {2}",

                //    frame.GetMethod(), frame.GetFileName(), lineNumber);

                //stackTraceString.AppendLine();
            }
            logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("LineNumber", lineNumber)); // 添加到日志事件中，此处仅为示例，实际应用中需要根据实际情况调整。
            
           // logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("LineNumber", logEvent.Properties["Line"]));
        }
    }
}
